﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<ctype.h>
#include<string.h>

//int main()//笔试题
//{
//	int a[5][5];
//	int(*p)[4];//p是数组指针，指向4个元素
//	p = a;//p类型int*[4],a是int*[5]
//	printf("%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);
//	return 0;
//}

//int main()
//{
//	int aa[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//	int* ptr1 = (int*)(&aa + 1);
//	int* ptr2 = (int*)(*(aa + 1));//*（p+1）=p[1]
//	printf("%d,%d", *(ptr1 - 1), *(ptr2 - 1));//10  5
//	return 0;
//}

//int main()
//{
//	char* a[] = { "work","at","alibaba" };//数组里面存放的是字符串首字符地址
//	char** pa = a;
//	pa++;
//	printf("%s\n", *pa);//at   %s打印字符串，给一个地址，从这个地址向后打印
//	return 0;
//}

//int main()
//{
//	char* c[] = { "ENTER","NEW","POINT","FIRST" };
//	char** cp[] = { c + 3,c + 2,c + 1,c };
//	char*** cpp = cp;
//	printf("%s\n", **++cpp);//POINT
//	printf("%s\n", *-- * ++cpp + 3);//ER  * ++cpp  *--（c+1进行--）    +3
//	printf("%s\n", *cpp[-2] + 3);//cpp[-2]==*(CPP-2)  CPP位置不动只有++，--位置才会变
//	printf("%s\n", cpp[-1][-1] + 1);//cpp[-1][-1]==*(*(CPP-1)-1)
//	return 0;
//}


//字符函数 --- int islower ( int c );
//int main()
//{
//	int ret = islower('a');
//	printf("%d\n", ret);
//	return 0;
//}

//写⼀个代码，将字符串中的⼩写字⺟转⼤写，其他字符不变
//int main()
//{
//	char arr[] = "I Am a Student";
//	int i = 0;
//	while (arr[i] != '\0')
//	{
//		//if (arr[i] >= 'a' && arr[i] <= 'z')
//		if(islower(arr[i]))
//		{
//			//arr[i] -= 32;
//          arr[i]=toupper(arr[i])
//		}
//		i++;
//	}
//	printf("%s ", arr);
//	return 0;
//}
//int tolower ( int c ); //将参数传进去的⼤写字⺟转⼩写 ,int toupper(int c); //将参数传进去的⼩写字⺟转⼤写
//int main()
//{
//	printf("%c ", tolower('A'));
//	return 0;
//}

//字符串函数
//int main()
//{
//	if (strlen("abc") - strlen("abcdef") > 0)//返回类型是size_t(非负)
//		printf(">\0");//ok
//	else
//		printf("<=\n");
//	return 0;
//}
// //模拟实现  1，计数器 2，指针-指针 3，递归
//size_t my_strlen(char* s)
//{
//    int count = 0;
//    while (*s != '\0')
//    {
//        count++;
//        s++;
//    }
//    return count;
//}
//size_t my_strlen(char* s)
//{
//    if (*s == '\0')
//        return 0;
//    else
//        return 1 + my_strlen(s + 1);
//}
//int main()
//{
//    char arr[] = "abcdef";
//    size_t ret = my_strlen(arr);
//    printf("%zd", ret);
//    return 0;
//}

// strcpy 的使⽤和模拟实现
//void my_strcpy(char* dest,const char* src)
//{
//	assert(src != NULL);
//	assert(dest != NULL);
//	while (*src != '\0')
//	{
//		*dest = *src;
//		dest++;
//		src++;
//	}
//	*dest = *src;
//}
//int main()
//{
//	char arr1[] = "hello bit";
//	char arr2[20] = "xxxxxxxxxxxxxxxxxxxxxxxxxxx";
//	//strcpy(arr2, arr1);
//	my_strcpy(arr2, arr1);
//	printf("%s ", arr2);
// return 0;
//}

// strcat 的使⽤和模拟实现
//char* my_strcat(char* dest, char* src)
//{
//	char* ret = dest;
//	while (*dest != '\0')
//		dest++;
//	while (*dest++ = *src++)
//		;//空语句
//	return ret;
//}
//int main()
//{
//	char arr1[20] = "hello  ";
//	char arr2[] = "world";
//	//strcat(arr1, arr2);
//	char* s=my_strcat(arr1,arr2)
//	printf("%s\n", s);
//	return 0;
//}